package com.wang.common.util;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.ResourceBundle;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

/**
 * 全部是一些静态的常量
 *
 * @author Wangsh
 */
public class ConstatFinalUtil {
    /* 定义日志对象 */
    public static final Logger SYS_LOGGER = LogManager.getLogger();

    /* 定义资源文件 */
    public static final ResourceBundle SYS_BUNDLE = ResourceBundle.getBundle("system");

    /* 所有的字符串 */
    public static final String ALLSTR = "abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789";

    /* 日期的默认格式 */
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    /* 日期时间的默认格式 */
    public static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    /* 字符串连接 */
    public static final String SPLIT_STR = "|-->";
    /* 拆分字符串 */
    public static final String SPLIT_STR_ZHUAN = "\\|-->";
    /* 秒 */
    public static final int SECOND = 1000;
    /* 编码 */
    public static final String CHARSET = "UTF-8";

    /* 配置文件共享的变量 */
    public static Map<String, Object> SYS_PRO_MAP = new Hashtable<String, Object>();
    /* 精度的长度(小数点以后) */
    public static int PRECISION_LENGTH = 6;

    /* 配置文件中的json对象 */
    public static JSONObject SYS_JSON = new JSONObject();
    /* 配置文件中的json对象,Config模块 */
    public static JSONObject CONFIG_JSON = new JSONObject();
    /* 配置文件中的json对象,info模块 */
    public static JSONObject INFO_JSON = new JSONObject();
    /* 配置文件中系统模块的全局配置 */
    public static JSONObject SYS_CONFIG_JSON = new JSONObject();

    /*
     * 放一些初始化的操作 只执行一次
     */
    static {
        /* FastJSON中默认的格式 */
        JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

        FileUtil fileUtil = new FileUtil();
        /* 从Classpath中获取 */
        String result = fileUtil.readFile(ConstatFinalUtil.class.getClassLoader().getResourceAsStream("config.json"));
        /* 将字符串变成JSON对象 */
        try {
            SYS_JSON = (JSONObject) JSON.parse(result);
            CONFIG_JSON = SYS_JSON.getJSONObject("config");
            INFO_JSON = SYS_JSON.getJSONObject("info");
            SYS_CONFIG_JSON = CONFIG_JSON.getJSONObject("sysConfig");
        } catch (Exception e) {
            ConstatFinalUtil.SYS_LOGGER.error("解析配置文件json,失败了;原文:{}", result);
        }

        //设置https协议访问
        //System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2,SSLv3");
    }

    /**
     * 随即休眠
     * st-->ed 百毫秒,间隔是300毫秒
     * type:slow(慢),fast:(快)
     * 单位是毫秒
     */
    public static void randSleep(String type) {
        int st = 0;
        int ed = 0;
        if ("slow".equalsIgnoreCase(type)) {
            /* 慢 */
            st = 10;
            ed = 30;
        } else if ("fast".equalsIgnoreCase(type)) {
            /* 快 */
            st = 3;
            ed = 10;
        }
        Random rand = new Random();
        while (true) {
            int randInt = (rand.nextInt(ed));
            if (randInt >= st) {
                try {
                    Thread.sleep(randInt * 100);
                    ConstatFinalUtil.SYS_LOGGER.info("休眠时长(毫秒):{}", randInt * 100);
                    break;
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 把json对象变成map
     */
    public static Map<String, String> jsonToMap(JSONObject jsonObject) {
        Map<String, String> resultMap = new HashMap<String, String>();
        if (jsonObject != null) {
            for (Iterator iterator = jsonObject.entrySet().iterator(); iterator.hasNext(); ) {
                Entry me = (Entry) iterator.next();
                String key = me.getKey() + "";
                String val = me.getValue() + "";
                resultMap.put(key, val);
            }
        }
        return resultMap;
    }
}
